home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / TURBOPASCAL WIN / OWLDEMOS.PAK / OWLPEN.PAS < prev    next >
Pascal/Delphi Source File  |  1992-06-08  |  4KB  |  147 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Pascal for Windows                     }
  4. {   Demo program                                 }
  5. {   Copyright (c) 1992 by Borland International  }
  6. {                                                }
  7. {************************************************}
  8.  
  9. {
  10.   This OWL example demonstrates how to make an application PenWindows
  11.   sensitive.
  12.  
  13.   If this application is not running under PenWindows then the application
  14.   works like a traditional Windows application with a TextEdit box.
  15.  
  16.   The mouse should only be used as the stylus for testing it is almost always
  17.   inferior to a pen/tablet hardware configuration. It will also produce poor
  18.   recognition results.
  19.  
  20.   This is the simplest way to make an application pen aware the steps are:
  21.  
  22.       1. Check for PenWindows
  23.       2. Register the application as a pen application, if PenWindow exists
  24.       3. Create two different dialog boxes depending on whether the
  25.      application is running under Windows or PenWindows.  Under Pen
  26.      Windows a BEDIT control is used for text recognition and entry.
  27.  }
  28.  
  29. program OWLPenDemo;
  30.  
  31. uses WinProcs, WinTypes, WObjects, Strings, Win31, PenWin;
  32.  
  33. {$R OWLPEN.RES}
  34.  
  35. const
  36.   id_Button          = 101;
  37.   TextEntryDialog    = 102;
  38.   PenTextEntryDialog = 103;
  39.  
  40.   id_Edit            = 1000;
  41.   id_Show            = 1001;
  42.   id_Text            = 1002;
  43.  
  44. type
  45.   TRegPenApp = procedure(w: Word; b: Bool);
  46.  
  47.   TTestApp = object(TApplication)
  48.     hPenWin: THandle;
  49.     RegPen: Pointer;
  50.     procedure InitMainWindow; virtual;
  51.   end;
  52.  
  53.   PTestWIndow = ^TTestWindow;
  54.   TTestWindow = object(TWindow)
  55.    EditText: array[0..80] of Char;
  56.    hPenWindow: THandle;
  57.    constructor Init(AParent: PWindowsObject; ATitle: PChar; hPenWin: THandle);
  58.    procedure HandleButtonMsg(var Msg: TMessage); virtual id_First + id_Button;
  59.    procedure Paint(PaintDC: HDC; var PaintInfo: TPaintStruct); virtual;
  60.    procedure SetEditText(Text: PChar); 
  61.   end;
  62.  
  63.   PDialogTextEntry = ^TDialogTextEntry;
  64.   TDialogTextEntry = object(TDialog)
  65.     procedure HandleShowButton(var Msg: TMessage); virtual id_First + id_Show;
  66.   end;
  67.  
  68. constructor TTestWindow.Init(AParent: PWindowsObject; ATitle: PChar; hPenWin: THandle);
  69. var
  70.   PCntrl: PWindowsObject;
  71. begin
  72.   TWindow.Init(AParent, ATitle);
  73.   hPenWindow := hPenWin;
  74.   { display a line of text, showing (Pen)Windows is installed }
  75.   if hPenWindow <> 0 then
  76.     StrCopy(EditText, 'PenWindows Installed')
  77.   else
  78.     StrCopy(EditText, 'PenWindows is not Installed');
  79.  
  80.   Attr.X := 100;
  81.   Attr.Y := 100;
  82.   Attr.W := 400;
  83.   Attr.H := 300;
  84.  
  85.   PCntrl := New(PButton, Init(@Self, id_Button, 'Text Entry', 0, 0,
  86.     100, 24, False));
  87. end;
  88.  
  89. procedure TTestWindow.Paint(PaintDC: HDC; var PaintInfo: TPaintStruct);
  90. begin
  91.   TextOut(PaintDC, 150, 2, EditText, StrLen(EditText));
  92. end;
  93.  
  94. procedure TTestWindow.SetEditText(Text: PChar);
  95. begin
  96.   StrCopy(EditText, Text);
  97. end;
  98.  
  99. { response function to SHOW button, get text and show it in
  100.   the lower control }
  101.  
  102. procedure TDialogTextEntry.HandleShowButton(var Msg: TMessage);
  103. var
  104.   Buffer: array[0..80] of Char;
  105. begin
  106.   GetDlgItemText(HWindow, id_Edit, Buffer, 80);
  107.   SetDlgItemText(HWindow, id_Text, Buffer);
  108. end;
  109.  
  110. { open a dialogbox, depending on (Pen)Windows running or not
  111.  You may look at OWLPEN.RC file and see that BEDIT is used in
  112.  PenTextEntryDialog }
  113.  
  114. procedure TTestWindow.HandleButtonMsg(var Msg: TMessage);
  115. var
  116.   ResID: Word;
  117. begin
  118.   if hPenWindow <> 0 then ResId := PenTextEntryDialog else
  119.     ResId := TextEntryDialog;
  120.   Application^.ExecDialog(New(PDialogTextEntry, Init(@Self, PChar(ResId))));
  121. end;
  122.  
  123. procedure TTestApp.InitMainWindow;
  124. begin
  125.   hPenWin := GetSystemMetrics(sm_PenWindows);
  126.   if hPenWin <> 0 then
  127.   begin
  128.     { PenWindows is now running, Get adress of RegisterPenApp using
  129.       runtime dynamic linking }
  130.     RegPen := GetProcAddress(hPenWin, 'RegisterPenApp');
  131.     { Call RegisterPenApp to indicate that we are a PenWindows
  132.       application }
  133.     if RegPen <> nil then
  134.       TRegPenApp(RegPen)(rpa_Default, True);
  135.   end;
  136.   MainWindow := New(PTestWindow, Init(nil, Name, hPenWin));
  137. end;
  138.  
  139. var
  140.   App: TTestApp;
  141.  
  142. begin
  143.   App.Init('This Owl is pen aware');
  144.   App.Run;
  145.   App.DOne;
  146. end.
  147.